package cn.rzpt.demo.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import cn.rzpt.demo.entity.User;

/**
 * UserMapper 接口
 * @author zsm
 *
 */
public interface UserMapper {
	
	/**
	 * 持久化一条数据
	 * @param user
	 * @return
	 */
	int save(User user);
	/**
	 * 根据主键删除
	 * @param id
	 * @return
	 */
	int deleteById(String id);
	
	/**
	 * 根据id更新密码
	 * @param id
	 * @param password
	 * @return
	 */
	int updatePassword(@Param("id") String id,@Param("password")String password);
	/**
	 * 更新一条记录
	 * @param user
	 * @return
	 */
	int update(User user);
	
	/**
	 * 统计用户数量
	 * @return
	 */
	int count();
	/**
	 * 查询所有用户
	 * @return
	 */
	List<User> queryAll();
	/**
	 * 根据姓名查询
	 * @param name 姓名条件
	 * @return
	 */
	List<User> queryByName(String name);
	/**
	 * 根据姓名和id查询
	 * @param id
	 * @param name
	 * @return   
	 */
	List<User> queryByNameAndId(@Param("id") String id,@Param("name") String name);
	/**
	 * 根据条件进行查询
	 * @param user 查询条件
	 * @return
	 */
	List<User> queryList(User user);
	/**
	 * 根据条件进行查询
	 * @param map 查询条件
	 * @return
	 */
	List<User> queryListByMap(Map<String, String> map);
	/**
	 * 根据用户id获取用户的地址列表
	 * @param id
	 * @return
	 */
	List<User> queryUserAddressByUserId(String id);
	
	/**
	 * 根据用户的姓名和角色id查询
	 * @param name 用户姓名
	 * @param roleId 角色id
	 * @return
	 */
	List<User> queryUserByNameAndRoleId(@Param("name") String name, @Param("roleId") Integer roleId);
	
	/**
	 * 根据角色id数组查询
	 * @param roleIds 角色id数组
	 * @return
	 */
	List<User> queryUserByRoleIds(Integer[] roleIds);
	/**
	 * 根据角色id 列表查询
	 * @param roleIds 角色id列表
	 * @return
	 */
	List<User> queryUserByRoleIdList(List<Integer> roleIds);
	
	
	/**
	 * 根据姓名(name)和 角色id集合(roleIds)查询  
	 * @param params
	 * @return
	 */
	List<User> queryUserByNameRoleIds(Map<String, Object> params);
	/**
	 * 使用Choose实现查询
	 * @param user
	 * @return
	 */
	List<User> queryUserByChoose(User user);
		
	/**
	 * 分页查询
	 * @param pageSize
	 * @param start
	 * @param name
	 * @param gender
	 * @return
	 */
	List<User> queryUserPage(@Param("pageSize") int pageSize, @Param("start") int start, @Param("name") String name, @Param("gender") String gender);
}
